#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/11/27 15:46
# @Author  : Beam
# @Site    : 
# @File    : writeLog.py
# @Software: PyCharm

'''
@所有记录日志的都调用这个方法，需要传递message、日志记录文件名
@新增日志文件名请记录到这里，作为备忘
@调用该类方法：
from func.writeLog import Loggers
Loggers('日志文件名').log(message,*True)
@logname：
api.log
'''
import os,sys  #脚本执行测试调用
DIR = os.path.dirname(os.getcwd())   #获取父级根目录绝对路径
sys.path.append(DIR)    #把父级根目录加入到环境变量，可以导入该目录下其他子级模块

import os
import logging

from config import setting

class Loggers(object):
	#__instance = None

	def __init__(self,logname):
		self.info_log_file = os.path.join(setting.INFO_LOG_FILE_PATH)
		self.error_log_file = os.path.join(setting.ERROR_LOG_FILE_PATH)
		self.info_logger = None
		self.error_logger = None
		self.logname = logname
		#初始化目录和日志文件方法
		self.initialize_info_log()
		self.initialize_error_log()

	# def __new__(cls,logname):  # 单例模式
	# 	if not cls.__instance:
	# 		cls.__instance = object.__new__(cls, logname)
	# 	return cls.__instance

	@staticmethod
	def check_path_exist(log_abs_file):
		if not os.path.exists(log_abs_file):
			os.mkdir(log_abs_file)

	def initialize_info_log(self):
		self.check_path_exist(self.info_log_file)  #初始化info日志目录
		file_1_1 = logging.FileHandler(self.info_log_file+self.logname, 'a', encoding='utf-8')  #写入的日志文件位置
		fmt = logging.Formatter(fmt="%(asctime)s - %(levelname)s :  %(message)s")
		file_1_1.setFormatter(fmt)
		logger1 = logging.getLogger('info_log')  # 创建一个logger：info_log 相当于这个日志规则的名字
		logger1.setLevel(logging.INFO)           # 日志级别
		logger1.addHandler(file_1_1)
		self.info_logger = logger1

	def initialize_error_log(self):
		self.check_path_exist(self.error_log_file)
		file_1_1 = logging.FileHandler(self.error_log_file+self.logname, 'a', encoding='utf-8')
		fmt = logging.Formatter(fmt="%(asctime)s  - %(levelname)s :  %(message)s")
		file_1_1.setFormatter(fmt)
		logger1 = logging.Logger('error_log', level=logging.ERROR)
		logger1.addHandler(file_1_1)
		self.error_logger = logger1

	def log(self,message, mode=True):
		"""
		写入日志
		:param message: 日志信息
		:param mode: True表示运行信息，False表示错误信息
		:return:
		"""
		if mode:
			self.info_logger.info(message)
		else:
			self.error_logger.error(message)

#Test code
# Loggers('api.log').log('test info',True)




